package com.xisoft.base.service;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.xisoft.base.entity.BaseVO;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * *
 * Created with Description:
 *
 * @version 1.0 <br>
 * @packagename: com.xisoft.abs<br>
 * @author: LiBencheng <br>
 * @computer: licheng <br>
 * @date: Created on 2022/7/19 9:52 <br>
 */
public interface XfService< T extends BaseVO > extends Serializable, Cloneable
        // 这里继承，Controller层能直接掉数据库，将不会受事务控制
        // extends com.baomidou.mybatisplus.extension.service.IService< VO >
{

    Map< String,Object > getField(String table, String field);

    T selectById(Serializable id);

    /************************************************************* <br>
     *
     *说明: 查询（根据ID 批量查询）<br>
     *
     * @Description   <br>
     * @Date Created on 2022/7/28  15:34  <br>
     * @param idList <br>
     * @return java.util.List<T>  <br>
     * @Author LIBENCHENG
     * @version 1.0 <br>
     ************************************************************* <br>
     */
    List< T > selectBatchIds(Collection< ? extends Serializable > idList);

    /************************************************************* <br>
     *
     *说明: 查询（根据 columnMap 条件）<br>
     *
     * @Description   <br>
     * @Date Created on 2022/7/28  15:38  <br>
     * @param columnMap <br>
     * @return java.util.List<T>  <br>
     * @Author LIBENCHENG
     * @version 1.0 <br>
     ************************************************************* <br>
     */
    List< T > selectByMap(Map< String,Object > columnMap);


    /************************************************************* <br>
     *
     *说明:根据 Wrapper 条件，查询总记录数 <br>
     *
     * @Description   <br>
     * @Date Created on 2022/7/28  16:02  <br>
     * @param queryWrapper 实体对象封装操作类（可以为 null）<br>
     * @return java.lang.Long  <br>
     * @Author LIBENCHENG
     * @version 1.0 <br>
     ************************************************************* <br>
     */
    Long selectCount(Wrapper< T > queryWrapper);


    /************************************************************* <br>
     *
     *说明: 根据 entity 条件，查询全部记录<br>
     *
     * @Description   <br>
     * @Date Created on 2022/7/28  16:02  <br>
     * @param queryWrapper 实体对象封装操作类（可以为 null）<br>
     * @return java.util.List<T>  <br>
     * @Author LIBENCHENG
     * @version 1.0 <br>
     ************************************************************* <br>
     */
    List< T > selectList(Wrapper< T > queryWrapper);


    /************************************************************* <br>
     *
     *说明: 根据 Wrapper 条件，查询全部记录<br>
     *
     * @Description   <br>
     * @Date Created on 2022/7/28  16:03  <br>
     * @param queryWrapper 实体对象封装操作类（可以为 null）<br>
     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Object>>  <br>
     * @Author LIBENCHENG
     * @version 1.0 <br>
     ************************************************************* <br>
     */
    List< Map< String,Object > > selectMaps(Wrapper< T > queryWrapper);


    /************************************************************* <br>
     *
     *说明: 根据 Wrapper 条件，查询全部记录<br>
     *   <p>注意： 只返回第一个字段的值</p>
     * @Description   <br>
     * @Date Created on 2022/7/28  16:03  <br>
     * @param queryWrapper 实体对象封装操作类（可以为 null）<br>
     * @return java.util.List<java.lang.Object>  <br>
     * @Author LIBENCHENG
     * @version 1.0 <br>
     ************************************************************* <br>
     */
    List< Object > selectObjs(Wrapper< T > queryWrapper, Function< ? super Object,T > mapper);


}
